﻿using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using CIRS.Algoritmos;
using Fachada;
using ObjetoNegocio;

namespace CIRS
{
    /// <summary>
    /// Interaction logic for FrmPrincipal.xaml
    /// </summary>
    public partial class FrmPrincipal : Window
    {
        public FrmPrincipal()
        {
            InitializeComponent();
            CarregarUsuarios();
        }

        private UserControl _UserControl { get; set; }
        public static Usuario UsuarioLogado { get; set; }

        private IFachada _fachada;
        public IFachada Fachada
        {
            get
            {
                if (_fachada == null)
                {
                    _fachada = new Fachada.Fachada();
                }
                return _fachada;
            }
        }


        private void CarregarUserControl(UIElement control)
        {
            try
            {
                ctnUserControl.Child = null;
                ctnUserControl.Visibility = Visibility.Visible;
                ctnUserControl.Child = control;
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message, "Erro", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        private void FecharCommand(object sender, ExecutedRoutedEventArgs e)
        {
            Close();
        }

        private void BuscarAlgoritmoCommand(object sender, ExecutedRoutedEventArgs e)
        {
            var uc = new UcBuscarAlgoritmo();
            uc.NotificarBuscaAlgoritmo += CarregarUcAvaliarAlgoritmo;
            _UserControl = uc;
            CarregarUserControl(_UserControl);
        }

        private void CarregarUcAvaliarAlgoritmo(Busca busca,List<Algoritmo> algoritmos)
        {
            var ucAvaliacao = new UcAvaliarAlgoritmo(busca, algoritmos);
            ucAvaliacao.NotificarBuscaAlgoritmo += CarregarUcListarAlgoritmos;
            ucAvaliacao.NotificarPararBuscaAlgoritmo += CarregarUcListarAlgoritmos;
            _UserControl = ucAvaliacao;
            CarregarUserControl(_UserControl);
        }

        private void CarregarUcListarAlgoritmos(List<Algoritmo> algoritmos)
        {
            _UserControl = new UcListarAlgoritmo(algoritmos);
            CarregarUserControl(_UserControl);
        }

        private void CadastrarAlgoritmoCommand(object sender, ExecutedRoutedEventArgs e)
        {
            _UserControl = new UcCadastrarAlgoritmo();
            CarregarUserControl(_UserControl);
        }

        private void ribTabAlgoritmo_Selected(object sender, RoutedEventArgs e)
        {

        }

        private void CarregarUsuarios()
        {
            cbUsuarios.ItemsSource = Fachada.ListarUsuarios();
            cbUsuarios.SelectedIndex = 0;
        }

        private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            UsuarioLogado = e.AddedItems[0] as Usuario;
            lblUsuario.Content = "Bem Vindo," + UsuarioLogado.Nome;
        }

        private void ListarAlgoritmoCommand(object sender, ExecutedRoutedEventArgs e)
        {
            _UserControl = new UcListarAlgoritmo();
            CarregarUserControl(_UserControl);
        }
    }
}
